﻿using System.Collections.Generic;
using System.Linq;
using AccesoData;
using Entidades;
using NUnit.Framework;

namespace Pruebas.PruebasDao
{
    [TestFixture]
    class PruebaDaoDetalleEstimado: CrearEntidades
    {
        [TestCase]
        public void PruebaAgregarDetalleEstimado()
        {
            Siniestro miSiniestro = DatosSiniestro();
            List<DetalleEstimado> lista = new List<DetalleEstimado>();

            DetalleEstimado detalle = FabricaEntidades.ObtenerDetalleEstimado();
            DetalleEstimado detalle2 = FabricaEntidades.ObtenerDetalleEstimado();
            
            detalle.Descripcion = "prueba";
            detalle.Monto = 50.5F;

            detalle2.Descripcion = "prueba2";
            detalle2.Monto = 500F;
            
            lista.Add(detalle);
            lista.Add(detalle2);

            miSiniestro.Detalle = lista;

            lista[0].Id =
                DAO.ObtenerFabrica(1).ObtenerDaoDetalleEstimado().AgregarDetalle(detalle, miSiniestro);
            lista[1].Id =
                DAO.ObtenerFabrica(1).ObtenerDaoDetalleEstimado().AgregarDetalle(detalle2, miSiniestro);

            Assert.AreNotEqual(-1,lista[0].Id);
            Assert.AreNotEqual(-1,lista[1].Id);
        }

        [TestCase]
        public void PruebaObtenerDetalleEstimado()
        {
            Siniestro miSiniestro = DatosSiniestro();
            List<DetalleEstimado> lista = new List<DetalleEstimado>();

            DetalleEstimado detalle = FabricaEntidades.ObtenerDetalleEstimado();
            DetalleEstimado detalle2 = FabricaEntidades.ObtenerDetalleEstimado();

            detalle.Descripcion = "prueba";
            detalle.Monto = 50.5F;

            detalle2.Descripcion = "prueba2";
            detalle2.Monto = 500F;

            miSiniestro.Detalle.Add(detalle);
            miSiniestro.Detalle.Add(detalle2);

            miSiniestro.Detalle[0].Id =
                DAO.ObtenerFabrica(1).ObtenerDaoDetalleEstimado().AgregarDetalle(detalle, miSiniestro);
            miSiniestro.Detalle[1].Id =
                DAO.ObtenerFabrica(1).ObtenerDaoDetalleEstimado().AgregarDetalle(detalle2, miSiniestro);

            lista =
                DAO.ObtenerFabrica(1).ObtenerDaoDetalleEstimado().ObtenerDetalleEstimado(miSiniestro);
            
            Assert.IsNotNull(lista);
            Assert.IsNotEmpty(lista);

            Assert.AreEqual(miSiniestro.Detalle[0].Id, lista[0].Id);
            Assert.AreEqual(miSiniestro.Detalle[1].Id, lista[1].Id);

            Assert.AreEqual(miSiniestro.Detalle[0].Monto, lista[0].Monto);
            Assert.AreEqual(miSiniestro.Detalle[1].Monto, lista[1].Monto);

            Assert.AreEqual(miSiniestro.Detalle[0].Descripcion, lista[0].Descripcion);
            Assert.AreEqual(miSiniestro.Detalle[1].Descripcion, lista[1].Descripcion);
        }

        [TestCase]
        public void PruebaEditarDetalle()
        {
            Siniestro miSiniestro = DatosSiniestro();
            List<DetalleEstimado> lista = new List<DetalleEstimado>();

            DetalleEstimado detalle = FabricaEntidades.ObtenerDetalleEstimado();
            DetalleEstimado detalle2 = FabricaEntidades.ObtenerDetalleEstimado();

            detalle.Descripcion = "prueba";
            detalle.Monto = 50.5F;

            detalle2.Descripcion = "prueba2";
            detalle2.Monto = 500F;

            miSiniestro.Detalle.Add(detalle);
            miSiniestro.Detalle.Add(detalle2);

            miSiniestro.Detalle[0].Id =
                DAO.ObtenerFabrica(1).ObtenerDaoDetalleEstimado().AgregarDetalle(detalle, miSiniestro);
            miSiniestro.Detalle[1].Id =
                DAO.ObtenerFabrica(1).ObtenerDaoDetalleEstimado().AgregarDetalle(detalle2, miSiniestro);
            
            miSiniestro.Detalle[0].Monto = 123.5F;
            miSiniestro.Detalle[0].Descripcion = "Editado";

            bool respuesta =
                DAO.ObtenerFabrica(1).ObtenerDaoDetalleEstimado().EditarDetalle(miSiniestro.Detalle[0]);
            lista =
                DAO.ObtenerFabrica(1).ObtenerDaoDetalleEstimado().ObtenerDetalleEstimado(miSiniestro);
            
            Assert.IsTrue(respuesta);
            Assert.AreEqual(miSiniestro.Detalle[0].Id, lista[0].Id);
            Assert.AreEqual(miSiniestro.Detalle[1].Id, lista[1].Id);

            Assert.AreEqual(miSiniestro.Detalle[0].Monto, lista[0].Monto);
            Assert.AreEqual(miSiniestro.Detalle[1].Monto, lista[1].Monto);

            Assert.AreEqual(miSiniestro.Detalle[0].Descripcion, lista[0].Descripcion);
            Assert.AreEqual(miSiniestro.Detalle[1].Descripcion, lista[1].Descripcion);
        }

        [TestCase]
        public void PruebaEliminarDetalle()
        {
            Siniestro miSiniestro = DatosSiniestro();
            List<DetalleEstimado> lista = new List<DetalleEstimado>();

            DetalleEstimado detalle = FabricaEntidades.ObtenerDetalleEstimado();
            DetalleEstimado detalle2 = FabricaEntidades.ObtenerDetalleEstimado();

            detalle.Descripcion = "prueba";
            detalle.Monto = 50.5F;

            detalle2.Descripcion = "prueba2";
            detalle2.Monto = 500F;

            miSiniestro.Detalle.Add(detalle);
            miSiniestro.Detalle.Add(detalle2);

            miSiniestro.Detalle[0].Id =
                DAO.ObtenerFabrica(1).ObtenerDaoDetalleEstimado().AgregarDetalle(detalle, miSiniestro);
            miSiniestro.Detalle[1].Id =
                DAO.ObtenerFabrica(1).ObtenerDaoDetalleEstimado().AgregarDetalle(detalle2, miSiniestro);

            bool respuesta =
                DAO.ObtenerFabrica(1).ObtenerDaoDetalleEstimado().EliminarDetalle(miSiniestro.Detalle[0]);
            lista =
                DAO.ObtenerFabrica(1).ObtenerDaoDetalleEstimado().ObtenerDetalleEstimado(miSiniestro);


            Assert.IsTrue(respuesta);
            Assert.AreEqual(lista.Count(),miSiniestro.Detalle.Count-1);
        }
    }
}
